﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace Iacym.Entities
{
    public class PERSONA : BaseEntity
    {
        public PERSONA()
        {
            this.AGENDA = new List<Agendum>();
            this.BAJAS = new List<BAJA>();
            this.DATOS_TRANSFERENCIA = new List<DATOS_TRANSFERENCIA>();
            this.DETALLE_ASISTENCIA = new List<DETALLE_ASISTENCIA>();
            this.DETALLE_CARGO = new List<DETALLE_CARGO>();
            this.ESTUDIOS_BIBLICOS = new List<ESTUDIOS_BIBLICOS>();
            this.HIJOS = new List<HIJO>();
            this.HISTORIAL_ESTADO_CIVIL = new List<HISTORIAL_ESTADO_CIVIL>();
            this.HISTORIAL_MINISTERIO = new List<HISTORIAL_MINISTERIO>();
            this.ESPOSAs = new List<MATRIMONIO>();
            this.ESPOSOs = new List<MATRIMONIO>();
            this.OFRENDAs = new List<OFRENDA>();
            this.DISCIPULOS = new List<PERSONA>();
            this.PERSONA_ESPECIALIDAD = new List<PERSONA_ESPECIALIDAD>();
            this.PERSONA_IDIOMAS = new List<PERSONA_IDIOMAS>();
            this.PERSONA_PROFESION = new List<PERSONA_PROFESION>();
            this.TELEFONOS = new List<TELEFONO>();
            this.TRABAJOes = new List<TRABAJO>();
        }

        public int Id { get; set; }

        [Display(Name = "Dni")]
        [Required(ErrorMessage = "DNI es requerido")]
        [MaxLength(8,ErrorMessage = "DNI requiere 8 dígitos")]
        [MinLength(8, ErrorMessage = "DNI requiere 8 dígitos")]
        public string Dni { get; set; }

        public int NroMembresia { get; set; }

        [Display(Name = "ApePaterno")]
        [Required(ErrorMessage = "Apellido Paterno es requerido")]
        public string ApePaterno { get; set; }

        [Display(Name = "ApeMaterno")]
        [Required(ErrorMessage = "Apellido Materno es requerido")]
        public string ApeMaterno { get; set; }
        
        [Display(Name = "Nombres")]
        [Required(ErrorMessage = "Nombres es requerido")]
        public string Nombres { get; set; }

        public string NombreCompleto 
        { 
            get
            {
                return ApePaterno + ' ' + ApeMaterno + ','+' ' + Nombres;
            }
        }

        [Display(Name = "FNacimiento")]
        [Required(ErrorMessage = "Fecha de Nacimiento es requerido")]
        public System.DateTime FechaNacimiento { get; set; }
        
        public string Direccion { get; set; }
        public string Email { get; set; }

        [Display(Name = "ECivil")]
        [Required(ErrorMessage = "Estado Civil es requerido")]
        public int EstadoCivilId { get; set; }

        [Display(Name = "Ubigeo")]
        [Required(ErrorMessage = "Ubigeo es requerido")]
        public int UbigeoId { get; set; }

        [Display(Name = "Sexo")]
        [Required(ErrorMessage = "Sexo es requerido")]
        public int SexoId { get; set; }

        public int DiscipuladorId { get; set; }
        public int CelulaId { get; set; }
        
        public bool Estado { get; set; }
        public bool Transferido { get; set; }
        public bool NoCreyente { get; set; }
        
        public string Observacion { get; set; }
        
        public bool Muerte { get; set; }
        
        public int IglesiaId { get; set; }

        public int CargoMinisterio { get; set; }

        public string Servicios { get; set; }
        
        public bool Local { get; set; }
        public bool Transferencia { get; set; }
        
        public DateTime? FechaBautizo { get; set; }
        public DateTime? FechaConversion { get; set; }
        public DateTime? FechaTransferencia { get; set; }
        public DateTime? FechaMuerte { get; set; }
        public DateTime? FechaNoMiembro { get; set; }
        public virtual ICollection<Agendum> AGENDA { get; set; }
        public virtual ICollection<BAJA> BAJAS { get; set; }
        public virtual CELULA CELULA { get; set; }
        public virtual List<DATOS_TRANSFERENCIA> DATOS_TRANSFERENCIA { get; set; }
        public virtual ICollection<DETALLE_ASISTENCIA> DETALLE_ASISTENCIA { get; set; }
        public virtual ICollection<DETALLE_CARGO> DETALLE_CARGO { get; set; }
        public virtual ESTADO_CIVIL ESTADO_CIVIL { get; set; }
        public virtual ICollection<ESTUDIOS_BIBLICOS> ESTUDIOS_BIBLICOS { get; set; }
        public virtual FOTO_PERSONA FOTO_PERSONA { get; set; }
        public virtual ICollection<HIJO> HIJOS { get; set; }
        public virtual ICollection<HISTORIAL_ESTADO_CIVIL> HISTORIAL_ESTADO_CIVIL { get; set; }
        public virtual ICollection<HISTORIAL_MINISTERIO> HISTORIAL_MINISTERIO { get; set; }
        public virtual IGLESIA IGLESIA { get; set; }
        public virtual ICollection<MATRIMONIO> ESPOSAs { get; set; }
        public virtual ICollection<MATRIMONIO> ESPOSOs { get; set; }
        public virtual ICollection<OFRENDA> OFRENDAs { get; set; }
        public virtual List<PERSONA> DISCIPULOS { get; set; }
        public virtual PERSONA DISCIPULADOR { get; set; }
        public virtual SEXO SEXO { get; set; }
        public virtual UBIGEO UBIGEO { get; set; }
        public virtual List<PERSONA_ESPECIALIDAD> PERSONA_ESPECIALIDAD { get; set; }
        public virtual List<PERSONA_IDIOMAS> PERSONA_IDIOMAS { get; set; }
        public virtual List<PERSONA_PROFESION> PERSONA_PROFESION { get; set; }
        public virtual List<TELEFONO> TELEFONOS { get; set; }
        public virtual List<TRABAJO> TRABAJOes { get; set; }
        public virtual USUARIO USUARIO { get; set; }


        public override string ToString()
        {
            return NombreCompleto;
        }
    }
}
